package com.turbo.cloud.gateway.utils.caffeine;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * Caffeine缓存工具类
 *
 * @author zhangluning
 */
public class CaffeineCacheUtil {
    /**
     * 常规缓存
     */
    final static Cache<String, Object> GENERAL_CACHE;
    /**
     * 接口缓存
     */
    final static Cache<String, List<String>> API_CACHE;

    static {
        // 初始化100条，最大1w条，缓存10分钟
        GENERAL_CACHE = Caffeine.newBuilder().initialCapacity(100).maximumSize(10_000).expireAfterAccess(10, TimeUnit.MINUTES).build();
        // 初始化100条，最大10w条，缓存5分钟
        API_CACHE = Caffeine.newBuilder().initialCapacity(100).maximumSize(10_0000).expireAfterAccess(5, TimeUnit.MINUTES).build();
    }

    /**
     * 设置缓存
     *
     * @param key   缓存key
     * @param value 缓存值
     */
    public static void setCache(String key, Object value) {
        GENERAL_CACHE.put(key, value);
    }

    /**
     * 获取缓存
     *
     * @param key 缓存key
     */
    public static Object getCache(String key) {
        return GENERAL_CACHE.getIfPresent(key);
    }

    /**
     * 设置(接口)缓存
     *
     * @param key   缓存key
     * @param value 缓存值
     */
    public static void setApiCache(String key, List<String> value) {
        API_CACHE.put(key, value);
    }

    /**
     * 获取(接口)缓存
     *
     * @param key 缓存key
     */
    public static List<String> getApiCache(String key) {
        return API_CACHE.getIfPresent(key);
    }
}
